package dto

import "math"

// PaginationQuery 分页查询参数
type PaginationQuery struct {
	// 页码（从1开始）
	Page int `form:"page" json:"page" binding:"min=1" default:"1"`
	// 每页大小
	PageSize int `form:"page_size" json:"page_size" binding:"min=1,max=100" default:"10"`
}

// GetOffset 获取偏移量
func (p *PaginationQuery) GetOffset() int {
	return (p.Page - 1) * p.PageSize
}

// GetLimit 获取限制数量
func (p *PaginationQuery) GetLimit() int {
	return p.PageSize
}

// PaginationResponse 分页响应
type PaginationResponse struct {
	// 当前页码
	Page       int   `json:"page"`        // 当前页码
	PageSize   int   `json:"page_size"`   // 每页大小
	Total      int64 `json:"total"`       // 总记录数
	TotalPages int   `json:"total_pages"` // 总页数
}

// FromParams 从参数构建分页响应
func (p *PaginationResponse) FromParams(page, pageSize int, total int64) {
	p.Page = page
	p.PageSize = pageSize
	p.Total = total
	p.TotalPages = int(math.Ceil(float64(total) / float64(pageSize)))
}
